package br.com.JZSolution.domineduplex.gui.dialogos;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.MalformedURLException;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

import br.com.JZSolution.domineduplex.DomineDuplex;
import br.com.JZSolution.domineduplex.controle.ControladorDePreferencias;
import br.com.JZSolution.domineduplex.controle.ControladorDeUsuario;
import br.com.JZSolution.domineduplex.exception.CadastroException;
import br.com.JZSolution.domineduplexserver.modelo.Usuario;

public class CadastroDialogo extends JDialog {

	private JLabel nomeLabel;
	private JLabel senhaLabel;
	private JLabel confSenhaLabel;
	private JLabel emailLabel;
	private JLabel texto;
	
	private JTextField nomeField;
	private JPasswordField senhaField;
	private JPasswordField confSenhaField;
	private JTextField emailField;

	private JButton cadastrar;
	private JButton cancelar;
	private Dimension dim;
	public CadastroDialogo(){
		
		dim = new Dimension(180,30);
		
		nomeLabel = new JLabel("Nome: ");
		senhaLabel = new JLabel("Senha: ");
		confSenhaLabel = new JLabel("Confirmação de senha: ");
		emailLabel = new JLabel("Email: ");
		
		nomeField = new JTextField();
		nomeField.setPreferredSize(dim);
		senhaField  = new JPasswordField();
		senhaField.setPreferredSize(dim);
		confSenhaField  = new JPasswordField();
		confSenhaField.setPreferredSize(dim);
		emailField  = new JTextField();
		emailField.setPreferredSize(dim);
		
		JPanel panelCampos = new JPanel(new GridLayout(8,0));
		panelCampos.add(nomeLabel,0);
		panelCampos.add(nomeField,1);
		panelCampos.add(emailLabel,2);
		panelCampos.add(emailField,3);
		panelCampos.add(senhaLabel,4);
		panelCampos.add(senhaField,5);
		panelCampos.add(confSenhaLabel,6);
		panelCampos.add(confSenhaField,7);
		
		panelCampos.setPreferredSize(new Dimension(220,250));
		JPanel panelCentralizador = new JPanel(new FlowLayout(FlowLayout.CENTER));
		panelCentralizador.add(panelCampos);
		
		cadastrar = new JButton("Cadastrar");
		cadastrar.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				//Verifica e envia para cadastrar no banco
				verificar(nomeField.getText(),emailField.getText(),senhaField.getPassword(),confSenhaField.getPassword());
			}
		});
		cancelar = new JButton("Cancelar");
		cancelar.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				dispose();
			}
		});
		JPanel panelBtns = new JPanel(new FlowLayout(FlowLayout.CENTER));
		panelBtns.add(cadastrar);
		panelBtns.add(cancelar);
		
		JPanel panelSup = new JPanel(new FlowLayout(FlowLayout.CENTER));
		String str = "<html>Para se cadastrar basta preencher os campos abaixo e <br>confirmar seu cadastro no seu email.<html>";
		texto = new JLabel(str);
		panelSup.add(texto);
		
		this.add(panelSup,BorderLayout.NORTH);
		this.add(panelCentralizador,BorderLayout.CENTER);
		this.add(panelBtns,BorderLayout.SOUTH);
		this.setMinimumSize(new Dimension(450,390));
		this.setLocationRelativeTo(DomineDuplex.getInstance().getMainframe());
		this.setTitle("Cadastro");
		this.setVisible(true);
		this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
	}
	
	private void verificar(String nome,String email,char[] senha, char[] confsenha){
		String msg = null;
		if(new String(senha).equals(new String(confsenha))){
			if(email.contains("@") && email.contains(".")){
				Usuario user = new Usuario(nome,new String(senha),email);
				try {
					user.setPorta(Integer.parseInt(ControladorDePreferencias.getInstance().getPropriedade(ControladorDePreferencias.PORTA)));
					ControladorDeUsuario.getInstance().cadastrarUsuario(user);
					msg = "<html>Cadastro realizado com sucesso, confirme seu cadastro<br> no email cadastrado.<html>";
				} catch (MalformedURLException e) {
					e.printStackTrace();
				} catch (CadastroException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
				
			}else {
				msg = "Email inválido, tente novamente!";
			}
		}else {
			msg = "Senha não confere com confirmação de senha! Tente novamente";
		}
		//TODO Enviar pro servidor
		setMensagem(msg);
	}
	/**
	 * Troca a mensagem do topo do diálogo
	 * @param msg, mensagme e a ser colocada no topo
	 */
	public void setMensagem(String msg){
		texto.setText(msg);
	}

}
